package com.douma.lock;

import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;

import java.util.concurrent.TimeUnit;

/**
 * 抖码课堂，专注中国程序员基础内功修炼
 * 官网：douma-tech.com
 * 公众号：抖码课堂
 *
 * @作者 : 老汤
 */
public class TestRedissonDistributeLock {
    public static void main(String[] args) {
        Config config = new Config();
        SingleServerConfig singleServerConfig = config.useSingleServer();
        singleServerConfig.setAddress("redis://192.168.126.131:6380");
        singleServerConfig.setPassword("123456");
        RedissonClient redissonClient = Redisson.create(config);

        // 拿到锁对象（可重入锁），指定锁名称
        RLock lock = redissonClient.getLock("mylock");

        try {
            // ① 加锁的最大等待时间 (期间没有加锁成功，会重试)
            // ② 锁过期时间 (自动释放的时间)
            // ③ 时间单位
            lock.tryLock(1000, 3000, TimeUnit.SECONDS);

            // 业务处理
            System.out.println("do something ...");
            TimeUnit.SECONDS.sleep(10);

        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }

        redissonClient.shutdown();
    }
}
